#ifndef SYSTEMTRAYMANAGER_H
#define SYSTEMTRAYMANAGER_H

/**
 * @file libukuitraymanager.h
 * @author zhangyinjie (zhangyinjie@kylinos.cn)
 * @brief 托盘管理
 * @version 0.1
 * @date 2023-4-30
 * @copyright Copyright (c) 2021
 *
 */


#include <QStringList>
#include <QObject>

class SystemTrayManager : public QObject
{
    Q_OBJECT
public:
    explicit SystemTrayManager();
    ~SystemTrayManager();

#if 1 //测试接口
    void testGetAllItemId();
    void testActive();
#endif

    /**
     * @brief 获取所有托盘图标信息
     * @param
     * @return
     */
    QMap<uint, QVariant> getAllTrayInfo();

    /**
     * @brief 获取收纳区所有托盘图标信息
     * @param
     * @return
     */
    QMap<uint, QVariant> getStorageAreaTrayInfo();

    /**
     * @brief 获取显示区所有托盘图标信息
     * @param
     * @return
     */
    QMap<uint, QVariant> getShowAreaTrayInfo();

    /**
     * @brief 获取固定区所有托盘图标信息
     * @param
     * @return
     */
    QMap<uint, QVariant> getFixedAreaTrayInfo();

    /**
     * @brief 鼠标左键单击激活托盘图标
     * @param x 鼠标点击位置x坐标； y鼠标点击位置y坐标
     */
    void active(int x, int y); // 鼠标左键事件。前端调用该方法，实现获取ItemSource，调用ItemSource的Activate

    /**
     * @brief 鼠标右键单击激活托盘图标
     * @param x 鼠标点击位置x坐标； y鼠标点击位置y坐标
     */
    void contextMenu(int x, int y);

    /**
     * @brief 鼠标中键单击激活托盘图标
     * @param x 鼠标点击位置x坐标； y鼠标点击位置y坐标
     */
    void secondaryActivate(int x, int y);

    /**
     * @brief 鼠标滚轮操作
     * @param delta 滚动量； orientation 滚动的方向，水平或垂直
     */
    void scroll(int delta, QString orientation);

signals:
    /*
    信号分类：分类原则是前端收到信号后是否需要重新获取全部的托盘图标
    数据增加信号：需要获取全部图标，重新绘制ui
    数据删除信号：只要获取删除的图标就可以啦
    数据更新信号：参数为变更的那个托盘信息
    */
    //数据模型更新信号。由model发出，lib做转发，前端绑定该信号使用
    /**
     * @brief 数据更新信号。前端需要绑定该信号，收到信号后，重新获取托盘图标信息，然后更新前端视图
     */
    void dataModelUpdata();

    /**
     * @brief 数据模型增加一个托盘Item。前端需要绑定该信号，收到信号后，重新获取托盘图标信息，然后更新前端视图
     */
    void dataModelAddItem();

    /**
     * @brief 数据模型删除一个托盘Item。前端需要绑定该信号，收到信号后，更新前端视图
     */
    void dataModelRemoveItem();

    /**
     * @brief 数据模型删除一个托盘Item。前端需要绑定该信号，收到信号后，更新前端视图
     */
    void dataModelUpdataItem();

private:
//    StatusNotifierModel *m_dataModel;
};



#endif // SYSTEMTRAYMANAGER_H
